package main

import "fmt"

// 尾递归
// 时间复杂度：O(n)
// 空间复杂度：O(n)
func factorial(n int64, res int64) int64 {
   if n <= 0 {
      return 0
   }
   // 最小子问题
   if n == 1 {
      return res
   }
   return factorial(n - 1, n * res);
}

func main() {
   res := factorial(6, 1)
   fmt.Println(res)
}
